Vad är den snabbaste metoden för att konvertera en java.nio.ByteBuffer a till en (nyligen skapad) CharBuffer b eller char [] b. Genom att göra detta är det viktigt att a [i] == b [i]. Det betyder att inte a [i] och a [i + 1] tillsammans utgör ett värde b [j], vad getChar (i) skulle göra, men värdena bör "spridas". byte a [] = {1,2,3, 125,126,127, -128, -127, -126} // vardera en byte (som är signerade) char b [] = {1,2,3, 125,126,127, 128, 129, 130} // vardera en char (som är osignerade) Observera att byte: -128 har samma (nedre 8) bitar som char: 128. Därför antar jag att den "bästa" tolkningen skulle vara som jag noterade ovan, eftersom bitarna är desamma. Efter det behöver jag också vice versa-översättningen: Det mest effektiva sättet att få en char [] eller java.nio.CharBuffer tillbaka till en java.nio.ByteBuffer.
2021-01-06 08:19:24
Så vad du vill är att konvertera med hjälp av kodningen ISO-8859-1. Jag hävdar ingenting om effektivitet, men det är åtminstone ganska kort att skriva: CharBuffer-resultat = Charset.forName ("ISO-8859-1"). Avkoda (byteBuffer); Den andra riktningen skulle vara: ByteBuffer-resultat = Charset.forName ("ISO-8859-1"). Kod (charBuffer); Vänligen mäta detta mot andra lösningar. (För att vara rättvis bör Charset.forName-delen inte inkluderas och ska också göras bara en gång, inte för varje buffert igen.) Från Java 7 och vidare finns också StandardCharsets-klassen med förinstanserade Charset-instanser, så att du kan använda CharBuffer-resultat = StandardCharsets.ISO_8859_1.decode (byteBuffer); och ByteBuffer-resultat = StandardCharsets.ISO_8859_1.encode (charBuffer); istället. (Dessa rader gör samma sak som de tidigare, det är bara att leta upp och det finns ingen risk att skriva namnen fel och du behöver inte fånga omöjliga undantag.) | Jag instämmer med @ Ishtar's, föreslår att du inte ska konvertera till en ny struktur alls och bara konvertera efter behov. Men om du har en hög ByteBuffer kan du göra. ByteBuffer bb = ... byte [] array = bb.array (); char [] chars = new char [bb.remaining ()]; för (int i = 0; i